<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
    <!-- react 分为 react-dom页面开发和  react--native app开发 所有功能要拆分 -->
    <!-- react核心包,提供了操作react的所有必要功能, 但是不提供Dom操作的相关功能, web和app都使用 -->
    <script crossorigin src="https://unpkg.com/react@18/umd/react.development.js"></script>
    <!-- reactDOM, 提供支持操作dom的相关功能 -->
    <script crossorigin src="https://unpkg.com/react-dom@18/umd/react-dom.development.js"></script>
    <!-- 添加后可直接使用jsx语法 -->
    <script src="https://unpkg.com/babel-standalone@6/babel.min.js"></script>
    <style>
        .myStyle {
            background-color: pink;
            color: orange;
        }
    </style>
</head>

<body>
    <div id="root">

    </div>
    <script type="text/babel">
        const msg = 'hello world';
        const reactRoot = ReactDOM.createRoot(document.getElementById('root'));
        // 这种输入会被当做字符串
        let imgEle = "<img src='https://www.legacy.reactjs.org' >"
        
        // 使用__html对象和dangerouslySetInnerHTML 声明输入内容为html
        function createMarkup() {
            return { __html: "<p><img src='https://www.legacy.reactjs.org' ></p>" };
        }
        let vDom = <div dangerouslySetInnerHTML={ createMarkup() }></div>

        // 使用dangerouslySetInnerHTML也会自动防范xss攻击
        function createMarkup1() {
            return { __html: "<script>alert('111')<\/script>" };
        }
        let vDom2 = <div dangerouslySetInnerHTML={ createMarkup1() }></div>

        // react 推荐使用style样式  实际开发根据功能创建css目录使用class
        reactRoot.render(
            <React.Fragment>
                {imgEle}
                {vDom}
                {vDom2}
            </React.Fragment>
        )
    </script>
</body>

</html>